아이템11
잉여 속성 체크의 한계 인지하기
- 타입스크립트는 객체 생성시 객체의 속성 존재유무와, 그 외 속성 유무를 체크한다.
interface Room {
numDoors: number;
ceilingHeigth: number;
}
// 알려진 속성만 지정가능하다며 오류 발생
const r: Room = {
numDoors: 1,
ceilingHeigth: 10,
elephant: "present",
};
const obj = {
numDoors: 1,
ceilingHeigth: 10,
elephant: "present",
};
// 할당이 가능
const x: Room = obj;
- 이는
할당 가능 검사와잉여 속성 체크는 별도의 과정임을 의미한다. - 2처럼 객체 리터럴 생성시 할당하면
잉여 속성 체크가 잃어나지 않는다. - 잉여 속성 체크는 필요한 속성 이외의 속성들을 체크하기 때문에
엄격한 객체 리터럴 체크라고도 불린다. - 잉여 속성 체크를 우회할 수 있는 방법이 있는데, 인덱스 시그니처를 사용하면 잉여 속성 체크를 무력화할 수 있다.
interface Room {
numDoors: number;
ceilingHeightFt: number;
[otherOptions: string]: unknown;
}
const r: Room = {
numDoors: 1,
ceilingHeightFt: 10,
elephant: "present",
}; // 정상